En lugar de obtener un s�lo objeto, como con Context.lookup(), podemos listar un contexto completo usando una sola operaci�n. Hay dos m�todos para listar un contexto: uno que devuelve las uniones y otro que s�lo devuelve las parejas de nombres de clases nombre-a-objeto.
�El M�todo Context.List()
Context.list() devuelve una enumeraci�n de NameClassPair.
Cada NameClassPair consiste en el nombre del objeto y el nombre de la clase. El siguiente fragmento de c�digo lista los contenidos del directorio "awt" (es decir, los ficheros encontrados en el directorio "awt").�
NamingEnumeration list = ctx.list("awt");
while (list.hasMore()) {
NameClassPair nc = (NameClassPair)list.next();
System.out.println(nc);
}
El ejecutar este ejemplo obtendremos la siguiente salida.
# java List accessibility: javax.naming.Context color: javax.naming.Context datatransfer: javax.naming.Context dnd: javax.naming.Context event: javax.naming.Context font: javax.naming.Context geom: javax.naming.Context im: javax.naming.Context image: javax.naming.Context peer: javax.naming.Context print: javax.naming.Context swing: javax.naming.Context
�El M�todo Context.listBindings()
Context.listBindings() devuelve una enumeraci�n de Binding.
Binding es una subclase de� NameClassPair.
Una binding (uni�n) no s�lo contiene el nombre del objeto y el nombre de su clase, tambi�n contiene el propio objeto. El siguiente c�digo enumera el contexto "awt", imprimiendo cada nombre de uni�n y el objeto.
NamingEnumeration bindings = ctx.listBindings("awt");
while (bindings.hasMore()) {
Binding bd = (Binding)bindings.next();
System.out.println(bd.getName() + ": " + bd.getObject());
}
Al ejecutar este ejemplo obtendremos una salida como esta.
# java ListBindings accessibility: com.sun.jndi.fscontext.RefFSContext@1dacd52e color: com.sun.jndi.fscontext.RefFSContext@1dacd551 datatransfer: com.sun.jndi.fscontext.RefFSContext@1dacd584 dnd: com.sun.jndi.fscontext.RefFSContext@1dacd5b6 event: com.sun.jndi.fscontext.RefFSContext@1dacd5e8 font: com.sun.jndi.fscontext.RefFSContext@1dacd61b geom: com.sun.jndi.fscontext.RefFSContext@1dacd64d im: com.sun.jndi.fscontext.RefFSContext@1dacd62a image: com.sun.jndi.fscontext.RefFSContext@1dacd65c peer: com.sun.jndi.fscontext.RefFSContext@1dacd68f print: com.sun.jndi.fscontext.RefFSContext@1dacd6c1 swing: com.sun.jndi.fscontext.RefFSContext@1dacd6f3
�Terminando una NamingEnumeration
Una NamingEnumeration puede terminarse de una de tres formas: naturalmente, expl�citamente o inexperadamente.
- Cuando un NamingEnumeration.hasMore() devuelve false, la enumeraci�n se ha completado efectivamente.
- Podemos terminar una enumeraci�n expl�citamente antes de que se haya
completado llamando a� NamingEnumeration.close().
Haciendo esto proporcionamos un aviso a la implementaci�n subyacente para que libere cualquier recurso asociado con la enumeraci�n.
- Si hasMore() o next() lanzan una NamingException, la enumeraci�n se termina de forma efectiva.
Sin importar el modo en que se ha terminado una enumeraci�n, una vez terminada no se puede volver a usar. Llamar a un m�todo sobre una enumeraci�n terminada nos dar� resultados indefinidos.
��Por qu� dos m�todos de listado diferentes?
list() se ha pensado para una aplicaci�n estilo navegador que s�lo quiere nombrar los nombres de los objetos de un contexto. Por ejemplo, un navegador podria listar los nombres de un contexto y esperar a que el usuario seleccione uno o unos pocos de los nombres mostrados para realizar operaciones futuras. Dichas aplicaciones normalmente no necesitan acceder a todos los objetos de un contexto.
listBindings() se ha pensado para aplicaciones que necesitan realizar operaciones en masa sobre los objetos de un contexto. Por ejemplo, una aplicaci�n de backup podr�a necesitar realizar operaciones de "estado de fichero" sobre todos los ficheros de un directorio. O un programa administrador de impresoras podr�a querer rearrancar todas las impresoras de un edificio. Para realizar dichas operaciones, estas aplicaciones necesitan obtener todos los objetos unidos en el contexto. Por eso es mucho m�s expeditivo devolver los objetos como parte de la enumeraci�n.
Qu� aplicaci�n puede usar list() o la potencialmente m�s costosa listBindings(), depende del tipo de informaci�n que se necesite.